package inc.sneid.reminderSpring.domains;

import jakarta.annotation.PostConstruct;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.sql.Timestamp;
import java.time.LocalDateTime;

@NoArgsConstructor
@Getter
@Setter
@Embeddable
public class Interval {

    public Interval(Deltas deltas) {
        this.startDate = Timestamp.valueOf(LocalDateTime.now());
        this.deltas = deltas;
        this.completed = false;
        this.updateNextDate();
    }

    @PostConstruct
    void checks(){
        this.updateNextDate();
    }

    /**
     * Маркер завершенности задачи.
     */
    private boolean completed;
    /**
     * Значение, говорящее когда вы начали повторять запись.
     */
    private Timestamp startDate;
    /**
     * Поле, указывающее следующую дату повторения. Если задача завершена, то в этом поле будет хранится
     * последняя дата повторения записи.
     */
    private Timestamp nextDate;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "deltas_name")
    private Deltas deltas;

    public void updateNextDate(){
        long time = startDate.getTime();
        long now = Timestamp.valueOf(LocalDateTime.now()).getTime();
        for (int i = 0; i < deltas.getDeltas().size(); i++) {
            time += deltas.getDeltas().get(i);
            if (time >= now){
                nextDate = new Timestamp(time);
                break;
            }
            if (i == deltas.getDeltas().size() - 1){
                completed = true;
            }
        }
    }
}
